home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / lkage.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  14KB  |  441 lines

  1. /***************************************************************************
  2.  
  3. Legend of Kage
  4. (C)1985 Taito
  5. CPU: Z80 (x2), MC68705
  6. Sound: YM2203 (x2)
  7.  
  8. Phil Stroffolino
  9. pjstroff@hotmail.com
  10.  
  11. Known issues:
  12.  
  13. SOUND: lots of unknown writes to the YM2203 I/O ports
  14. MCU (used by original version): not hooked up
  15.  
  16. ***************************************************************************/
  17.  
  18. #include "driver.h"
  19. #include "vidhrdw/generic.h"
  20. #include "cpu/z80/z80.h"
  21. #include "cpu/m6805/m6805.h"
  22.  
  23.  
  24. extern unsigned char *lkage_scroll, *lkage_vreg;
  25. WRITE_HANDLER( lkage_videoram_w );
  26. int lkage_vh_start(void);
  27. void lkage_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  28.  
  29. static int sound_nmi_enable,pending_nmi;
  30.  
  31. static void nmi_callback(int param)
  32. {
  33.     if (sound_nmi_enable) cpu_cause_interrupt(1,Z80_NMI_INT);
  34.     else pending_nmi = 1;
  35. }
  36.  
  37. WRITE_HANDLER( lkage_sound_command_w )
  38. {
  39.     soundlatch_w(offset,data);
  40.     timer_set(TIME_NOW,data,nmi_callback);
  41. }
  42.  
  43. WRITE_HANDLER( lkage_sh_nmi_disable_w )
  44. {
  45.     sound_nmi_enable = 0;
  46. }
  47.  
  48. WRITE_HANDLER( lkage_sh_nmi_enable_w )
  49. {
  50.     sound_nmi_enable = 1;
  51.     if (pending_nmi)
  52.     { /* probably wrong but commands may go lost otherwise */
  53.         cpu_cause_interrupt(1,Z80_NMI_INT);
  54.         pending_nmi = 0;
  55.     }
  56. }
  57.  
  58.  
  59. static READ_HANDLER( status_r )
  60. {
  61.     return 0x3;
  62. }
  63.  
  64. static READ_HANDLER( unknown0_r )
  65. {
  66.     return 0x00;
  67. }
  68.  
  69.  
  70.  
  71. static struct MemoryReadAddress readmem[] =
  72. {
  73.     { 0x0000, 0xdfff, MRA_ROM },
  74.     { 0xe000, 0xe7ff, MRA_RAM },
  75.     { 0xe800, 0xefff, paletteram_r },
  76.     { 0xf000, 0xf003, MRA_RAM },
  77.     { 0xf062, 0xf062, unknown0_r }, /* unknown */
  78.     { 0xf080, 0xf080, input_port_0_r }, /* DSW1 */
  79.     { 0xf081, 0xf081, input_port_1_r }, /* DSW2 (coinage) */
  80.     { 0xf082, 0xf082, input_port_2_r }, /* DSW3 */
  81.     { 0xf083, 0xf083, input_port_3_r },    /* start buttons, insert coin, tilt */
  82.     { 0xf084, 0xf084, input_port_4_r },    /* P1 controls */
  83.     { 0xf084, 0xf084, input_port_5_r },    /* P2 controls */
  84.     { 0xf087, 0xf087, status_r }, /* MCU? */
  85.     { 0xf0a3, 0xf0a3, unknown0_r }, /* unknown */
  86.     { 0xf0c0, 0xf0c5, MRA_RAM },
  87.     { 0xf100, 0xf15f, MRA_RAM },
  88.     { 0xf400, 0xffff, MRA_RAM },
  89.     { -1 }
  90. };
  91.  
  92. static struct MemoryWriteAddress writemem[] =
  93. {
  94.     { 0x0000, 0xdfff, MWA_ROM },
  95.     { 0xe000, 0xe7ff, MWA_RAM },
  96.     { 0xe800, 0xefff, MWA_RAM, &paletteram },
  97. //    paletteram_xxxxRRRRGGGGBBBB_w, &paletteram },
  98.     { 0xf000, 0xf003, MWA_RAM, &lkage_vreg }, /* video registers */
  99.     { 0xf060, 0xf060, lkage_sound_command_w },
  100.     { 0xf061, 0xf063, MWA_NOP }, /* unknown */
  101.     { 0xf0a2, 0xf0a3, MWA_NOP }, /* unknown */
  102.     { 0xf0c0, 0xf0c5, MWA_RAM, &lkage_scroll }, /* scrolling */
  103.     { 0xf0e1, 0xf0e1, MWA_NOP }, /* unknown */
  104.     { 0xf100, 0xf15f, MWA_RAM, &spriteram }, /* spriteram */
  105.     { 0xf400, 0xffff, lkage_videoram_w, &videoram }, /* videoram */
  106.     { -1 }
  107. };
  108.  
  109. static READ_HANDLER( port_fetch_r )
  110. {
  111.     return memory_region(REGION_USER1)[offset];
  112. }
  113.  
  114. static struct IOReadPort readport[] =
  115. {
  116.     { 0x4000, 0x7fff, port_fetch_r },
  117.     { -1 }
  118. };
  119.  
  120. #if 0
  121. static struct MemoryReadAddress m68705_readmem[] =
  122. {
  123.     { 0x0010, 0x007f, MRA_RAM },
  124.     { 0x0080, 0x07ff, MRA_ROM },
  125.     { -1 }
  126. };
  127.  
  128. static struct MemoryWriteAddress m68705_writemem[] =
  129. {
  130.     { 0x0010, 0x007f, MWA_RAM },
  131.     { 0x0080, 0x07ff, MWA_ROM },
  132.     { -1 }
  133. };
  134. #endif
  135.  
  136. /***************************************************************************/
  137.  
  138. /* sound section is almost identical to Bubble Bobble, YM2203 instead of YM3526 */
  139.  
  140. static struct MemoryReadAddress readmem_sound[] =
  141. {
  142.     { 0x0000, 0x7fff, MRA_ROM },
  143.     { 0x8000, 0x87ff, MRA_RAM },
  144.     { 0x9000, 0x9000, YM2203_status_port_0_r },
  145.     { 0xa000, 0xa000, YM2203_status_port_1_r },
  146.     { 0xb000, 0xb000, soundlatch_r },
  147.     { 0xb001, 0xb001, MRA_NOP },    /* ??? */
  148.     { 0xe000, 0xefff, MRA_ROM },    /* space for diagnostic ROM? */
  149.     { -1 }
  150. };
  151.  
  152. static struct MemoryWriteAddress writemem_sound[] =
  153. {
  154.     { 0x0000, 0x7fff, MWA_ROM },
  155.     { 0x8000, 0x87ff, MWA_RAM },
  156.     { 0x9000, 0x9000, YM2203_control_port_0_w },
  157.     { 0x9001, 0x9001, YM2203_write_port_0_w },
  158.     { 0xa000, 0xa000, YM2203_control_port_1_w },
  159.     { 0xa001, 0xa001, YM2203_write_port_1_w },
  160.     { 0xb000, 0xb000, MWA_NOP },    /* ??? */
  161.     { 0xb001, 0xb001, lkage_sh_nmi_enable_w },
  162.     { 0xb002, 0xb002, lkage_sh_nmi_disable_w },
  163.     { 0xe000, 0xefff, MWA_ROM },    /* space for diagnostic ROM? */
  164.     { -1 }
  165. };
  166.  
  167. /***************************************************************************/
  168.  
  169. INPUT_PORTS_START( lkage )
  170.     PORT_START      /* DSW1 */
  171.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Bonus_Life ) )
  172.     PORT_DIPSETTING(    0x03, "10000" ) /* unconfirmed */
  173.     PORT_DIPSETTING(    0x02, "15000" ) /* unconfirmed */
  174.     PORT_DIPSETTING(    0x01, "20000" ) /* unconfirmed */
  175.     PORT_DIPSETTING(    0x00, "24000" ) /* unconfirmed */
  176.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) )
  177.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  178.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  179.     PORT_DIPNAME( 0x18, 0x18, DEF_STR( Lives ) )
  180.     PORT_DIPSETTING(    0x18, "3" )
  181.     PORT_DIPSETTING(    0x10, "4" )
  182.     PORT_DIPSETTING(    0x08, "5" )
  183.     PORT_BITX(0,  0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "255", IP_KEY_NONE, IP_JOY_NONE )
  184.     PORT_DIPNAME( 0x20, 0x20, "Unknown DSW A 6" )
  185.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  186.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  187.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Flip_Screen ) ) /* unconfirmed */
  188.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  189.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  190.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) /* unconfirmed */
  191.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  192.     PORT_DIPSETTING(    0x80, DEF_STR( Cocktail ) )
  193.  
  194.     PORT_START      /* DSW2 */
  195.     PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Coin_A ) )
  196.     PORT_DIPSETTING(    0x0f, DEF_STR( 9C_1C ) )
  197.     PORT_DIPSETTING(    0x0e, DEF_STR( 8C_1C ) )
  198.     PORT_DIPSETTING(    0x0d, DEF_STR( 7C_1C ) )
  199.     PORT_DIPSETTING(    0x0c, DEF_STR( 6C_1C ) )
  200.     PORT_DIPSETTING(    0x0b, DEF_STR( 5C_1C ) )
  201.     PORT_DIPSETTING(    0x0a, DEF_STR( 4C_1C ) )
  202.     PORT_DIPSETTING(    0x09, DEF_STR( 3C_1C ) )
  203.     PORT_DIPSETTING(    0x08, DEF_STR( 2C_1C ) )
  204.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  205.     PORT_DIPSETTING(    0x01, DEF_STR( 1C_2C ) )
  206.     PORT_DIPSETTING(    0x02, DEF_STR( 1C_3C ) )
  207.     PORT_DIPSETTING(    0x03, DEF_STR( 1C_4C ) )
  208.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_5C ) )
  209.     PORT_DIPSETTING(    0x05, DEF_STR( 1C_6C ) )
  210.     PORT_DIPSETTING(    0x06, DEF_STR( 1C_7C ) )
  211.     PORT_DIPSETTING(    0x07, DEF_STR( 1C_8C ) )
  212.     PORT_DIPNAME( 0xf0, 0x00, DEF_STR( Coin_B ) )
  213.     PORT_DIPSETTING(    0xf0, DEF_STR( 9C_1C ) )
  214.     PORT_DIPSETTING(    0xe0, DEF_STR( 8C_1C ) )
  215.     PORT_DIPSETTING(    0xd0, DEF_STR( 7C_1C ) )
  216.     PORT_DIPSETTING(    0xc0, DEF_STR( 6C_1C ) )
  217.     PORT_DIPSETTING(    0xb0, DEF_STR( 5C_1C ) )
  218.     PORT_DIPSETTING(    0xa0, DEF_STR( 4C_1C ) )
  219.     PORT_DIPSETTING(    0x90, DEF_STR( 3C_1C ) )
  220.     PORT_DIPSETTING(    0x80, DEF_STR( 2C_1C ) )
  221.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  222.     PORT_DIPSETTING(    0x10, DEF_STR( 1C_2C ) )
  223.     PORT_DIPSETTING(    0x20, DEF_STR( 1C_3C ) )
  224.     PORT_DIPSETTING(    0x30, DEF_STR( 1C_4C ) )
  225.     PORT_DIPSETTING(    0x40, DEF_STR( 1C_5C ) )
  226.     PORT_DIPSETTING(    0x50, DEF_STR( 1C_6C ) )
  227.     PORT_DIPSETTING(    0x60, DEF_STR( 1C_7C ) )
  228.     PORT_DIPSETTING(    0x70, DEF_STR( 1C_8C ) )
  229.  
  230.     PORT_START      /* DSW3 */
  231.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) )
  232.     PORT_DIPSETTING(    0x03, "Easiest" ) /* unconfirmed */
  233.     PORT_DIPSETTING(    0x02, "Easy" )    /* unconfirmed */
  234.     PORT_DIPSETTING(    0x01, "Normal" )  /* unconfirmed */
  235.     PORT_DIPSETTING(    0x00, "Hard" )    /* unconfirmed */
  236.     PORT_DIPNAME( 0x04, 0x04, "Unknown DSW C 3" )
  237.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  238.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  239.     PORT_DIPNAME( 0x08, 0x08, "Unknown DSW C 4" )
  240.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  241.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  242.     PORT_DIPNAME( 0x10, 0x10, "Coinage Display" )
  243.     PORT_DIPSETTING(    0x10, "Coins/Credits" )
  244.     PORT_DIPSETTING(    0x00, "Insert Coin" )
  245.     PORT_DIPNAME( 0x20, 0x20, "Year Display" )
  246.     PORT_DIPSETTING(    0x00, "Normal" )
  247.     PORT_DIPSETTING(    0x20, "Roman Numerals" )
  248.     PORT_BITX(    0x40, 0x40, IPT_DIPSWITCH_NAME | IPF_CHEAT, "Invulnerability", IP_KEY_NONE, IP_JOY_NONE )
  249.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  250.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  251.     PORT_DIPNAME( 0x80, 0x80, "Coin Slots" )
  252.     PORT_DIPSETTING(    0x80, "A and B" )
  253.     PORT_DIPSETTING(    0x00, "A only" )
  254.  
  255.     PORT_START      /* Service */
  256.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  257.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  258.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
  259.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )
  260.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN1 )
  261.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
  262.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  263.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  264.  
  265.     PORT_START      /* IN1 */
  266.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
  267.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
  268.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
  269.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  270.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
  271.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
  272.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  273.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  274.  
  275.     PORT_START      /* IN2 */
  276.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  277.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
  278.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_COCKTAIL )
  279.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  280.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_COCKTAIL )
  281.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_COCKTAIL )
  282.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  283.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  284. INPUT_PORTS_END
  285.  
  286.  
  287.  
  288. static struct GfxLayout tile_layout =
  289. {
  290.     8,8,    /* 8x8 characters */
  291.     256,    /* number of characters */
  292.     4,        /* 4 bits per pixel */
  293.     { 1*0x20000,0*0x20000,3*0x20000,2*0x20000 },
  294.     { 7,6,5,4,3,2,1,0 },
  295.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  296.     64 /* offset to next character */
  297. };
  298.  
  299. static struct GfxLayout sprite_layout =
  300. {
  301.     16,16,    /* sprite size */
  302.     384,    /* number of sprites */
  303.     4,        /* bits per pixel */
  304.     { 1*0x20000,0*0x20000,3*0x20000,2*0x20000 }, /* plane offsets */
  305.     { /* x offsets */
  306.         7,6,5,4,3,2,1,0,
  307.         64+7,64+6,64+5,64+4,64+3,64+2,64+1,64
  308.     },
  309.     { /* y offsets */
  310.         0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  311.         128+0*8, 128+1*8, 128+2*8, 128+3*8, 128+4*8, 128+5*8, 128+6*8, 128+7*8 },
  312.     256 /* offset to next sprite */
  313. };
  314.  
  315.  
  316. static struct GfxDecodeInfo gfxdecodeinfo[] =
  317. {
  318.     { REGION_GFX1, 0x0000, &tile_layout,  128, 3 },
  319.     { REGION_GFX1, 0x0800, &tile_layout,  128, 3 },
  320.     { REGION_GFX1, 0x2800, &tile_layout,  128, 3 },
  321.     { REGION_GFX1, 0x1000, &sprite_layout,  0, 8 },
  322.     { -1 }
  323. };
  324.  
  325.  
  326.  
  327. static void irqhandler(int irq)
  328. {
  329.     cpu_set_irq_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE);
  330. }
  331.  
  332. static struct YM2203interface ym2203_interface =
  333. {
  334.     2,          /* 2 chips */
  335.     4000000,    /* 4 MHz ? (hand tuned) */
  336.     { YM2203_VOL(19,19), YM2203_VOL(19,19) },
  337.     { 0 },
  338.     { 0 },
  339.     { 0 },
  340.     { 0 },
  341.     { irqhandler }
  342. };
  343.  
  344.  
  345.  
  346. static struct MachineDriver machine_driver_lkage =
  347. {
  348.     {
  349.         {
  350.             CPU_Z80 | CPU_16BIT_PORT,
  351.             6000000,    /* ??? */
  352.             readmem,writemem,readport,0,
  353.             interrupt,1
  354.         },
  355.         {
  356.             CPU_Z80 | CPU_AUDIO_CPU,
  357.             6000000,    /* ??? */
  358.             readmem_sound,writemem_sound,0,0,
  359.             ignore_interrupt,0    /* NMIs are triggered by the main CPU */
  360.                                 /* IRQs are triggered by the YM2203 */
  361.         },
  362. //        {
  363. //            CPU_M68705,
  364. //            4000000/2,    /* ??? */
  365. //            m68705_readmem,m68705_writemem,0,0,
  366. //            ignore_interrupt,1
  367. //        },
  368.     },
  369.     60,DEFAULT_REAL_60HZ_VBLANK_DURATION,
  370.     1, /* CPU slices */
  371.     0, /* init machine */
  372.  
  373.     /* video hardware */
  374.     32*8, 32*8, { 1*8, 31*8-1, 2*8, 30*8-1 },
  375.     gfxdecodeinfo,
  376.     176,176,
  377.         /*
  378.             there are actually 1024 colors in paletteram, however, we use a 100% correct
  379.             reduced "virtual palette" to achieve some optimizations in the video driver.
  380.         */
  381.     0,
  382.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
  383.     0,
  384.     lkage_vh_start,
  385.     0,
  386.     lkage_vh_screenrefresh,
  387.  
  388.     /* sound hardware */
  389.     0,0,0,0,
  390.     {
  391.         {
  392.             SOUND_YM2203,
  393.             &ym2203_interface
  394.         }
  395.     }
  396. };
  397.  
  398. ROM_START( lkage )
  399.     ROM_REGION( 0x14000, REGION_CPU1 ) /* Z80 code (main CPU) */
  400.     ROM_LOAD( "a54-01-1.37", 0x00000, 0x8000, 0x973da9c5 )
  401.     ROM_LOAD( "a54-02-1.38", 0x08000, 0x8000, 0x27b509da )
  402.  
  403.     ROM_REGION( 0x10000, REGION_CPU2 ) /* Z80 code (sound CPU) */
  404.     ROM_LOAD( "a54-04.54",   0x00000, 0x8000, 0x541faf9a )
  405.  
  406.     ROM_REGION( 0x10000, REGION_CPU3 ) /* 68705 MCU code (not used) */
  407.     ROM_LOAD( "a54-09.53",   0x00000, 0x0800, 0x0e8b8846 )
  408.  
  409.     ROM_REGION( 0x4000, REGION_USER1 ) /* data */
  410.     ROM_LOAD( "a54-03.51",   0x00000, 0x4000, 0x493e76d8 )
  411.  
  412.     ROM_REGION( 0x10000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  413.     ROM_LOAD( "a54-05-1.84", 0x00000, 0x4000, 0x0033c06a )
  414.     ROM_LOAD( "a54-06-1.85", 0x04000, 0x4000, 0x9f04d9ad )
  415.     ROM_LOAD( "a54-07-1.86", 0x08000, 0x4000, 0xb20561a4 )
  416.     ROM_LOAD( "a54-08-1.87", 0x0c000, 0x4000, 0x3ff3b230 )
  417. ROM_END
  418.  
  419. ROM_START( lkageb )
  420.     ROM_REGION( 0x10000, REGION_CPU1 ) /* Z80 code (main CPU) */
  421.     ROM_LOAD( "lok.a",     0x0000, 0x8000, 0x866df793 )
  422.     ROM_LOAD( "lok.b",     0x8000, 0x8000, 0xfba9400f )
  423.  
  424.     ROM_REGION( 0x10000, REGION_CPU2 ) /* Z80 code (sound CPU) */
  425.     ROM_LOAD( "a54-04.54", 0x0000, 0x8000, 0x541faf9a ) // LOK.D
  426.  
  427.     ROM_REGION( 0x4000, REGION_USER1 ) /* data */
  428.     ROM_LOAD( "a54-03.51",   0x00000, 0x4000, 0x493e76d8 ) // LOK.C
  429.  
  430.     ROM_REGION( 0x10000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  431.     ROM_LOAD( "lok.f",     0x0000, 0x4000, 0x76753e52 )
  432.     ROM_LOAD( "lok.e",     0x4000, 0x4000, 0xf33c015c )
  433.     ROM_LOAD( "lok.h",     0x8000, 0x4000, 0x0e02c2e8 )
  434.     ROM_LOAD( "lok.g",     0xc000, 0x4000, 0x4ef5f073 )
  435. ROM_END
  436.  
  437.  
  438.  
  439. GAME( 1984, lkage,  0,     lkage, lkage, 0, ROT0, "Taito Corporation", "The Legend of Kage" )
  440. GAME( 1984, lkageb, lkage, lkage, lkage, 0, ROT0, "bootleg", "The Legend of Kage (bootleg)" )
  441.